昨天想要讓我的「小淘氣」動作,但是它就是不理我。
肯定是跟主人有相同的習性...「懶得動」
總之,我看我進度要慢慢來了。
不要又再肖想可以兩天就做好遊戲了!!!
import pygame
import random
pygame.init()
black = (0, 0, 0)
green = (91,231,196)
gameNaughtybox = pygame.display.set_mode((600,600))
pygame.display.set_caption("Naughty Box")
gameNaughtybox.fill(black)
x = 50
y = 50
width =60
height = 60
vel = 6
run = True
while run:
pygame.time.delay(50)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x>vel:
x-=vel
if keys [pygame.K_RIGHT] and x<600-width:
x+=vel
if keys [pygame.K_UP] and y>vel:
y-=vel
if keys [pygame.K_DOWN] and y<600-height:
y+=vel
gameNaughtybox.fill((0,0,0))
pygame.draw.rect(gameNaughtybox,green, (x, y, width, height))
pygame.display.update()
pygame.quit()
我今天再重新看過一次原始碼,然後也重新看教程。
我覺得用看的很容易覺得每行都理所當然,覺得沒什麼問題。
又得後補了。
自從參加這個比賽,好像重回學生生涯,每天趕死線)笑哭
接續上面的話題。
實際自己寫程式的時候就會發現,這個語法好像不太懂,那個段落剛剛看沒問題,但是自己寫的時候就會覺得「天阿!原作寫這是天書嗎?還是剛剛自己腦門被打到了,怎麼一瞬間又矇了」。
這也是我在後半段參賽的過程中,逼自己一定要帶程式碼在文章裡的原因,因為要親自打才知道問題,光看是不會知道自己的盲點的,就算發出來的程式碼外人看起來是基礎到一個不行,或是錯也沒有關係,但是肯定要 每天告訴自己要打code才會進步比較快 。這點想要分享給其他跟我一樣完全零基礎的學習者。
Practice makes perfect.
再回頭來看看那段程式碼,昨天那段程式碼也太悲催了吧,怎麼感覺特別的混亂。
我發現自己有一個問題,就是我似乎很愛用奇怪的詞命名,每次看其他人的命名就覺得特別工整,但是相對的也是有那麼一點無聊(?
總之,目前正在學習簡化,希望能寫出有趣又好玩的程式碼!
今天學習的重點:
pygame.time.delay(50)
那個底累括號 50 到底是在說什麼?
簡單來說 Pygame 中的時間是以毫秒(也就是千分之一秒)表示的,這段程式碼就是遊戲設計者想要讓程式暫停多久時間。
我 delay(50)
就是表示時間暫停千分之五十秒,也就是0.05秒。
pygame.display.set_caption("Naughty Box")
這是為了讓遊戲上方的遊戲介面能出現自己想要的名稱。
昨天就是卡死在這個環節,因為會忘記自己不是要做單純的圖形。
今天要做的是會動的形狀,因此不能只畫出固定的邊長,而是要找出矩形在遊戲介面左上角起始的座標、長寬和速度。
因此我寫了下面這段程式碼:
x = 50
y = 50
width =60
height = 60
vel = 6
其中vel = 6
,一開始根本不知道那是什麼......
谷歌了一下,其實也可以用 speed 來代替,就是速度(velocity)的意思。
因為目前還沒做過其他遊戲,但是我猜大部分的 pygame 都會需要「建立活動」,程式碼如下:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
就我的認知是,舉凡滑鼠移動、鍵盤上下左右等等動作,都可以稱之為活動。
因此,要先建立活動,讓系統知道有一場「遊戲」準備進行。
因為想要讓方塊自由移動,因此要設定用哪幾個按鍵可以操作它。
我選擇上下左右鍵,程式碼如下:
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x>vel:
x-=vel
if keys [pygame.K_RIGHT] and x<600-width:
x+=vel
if keys [pygame.K_UP] and y>vel:
y-=vel
if keys [pygame.K_DOWN] and y<600-height:
y+=vel
我覺得最困難的就是這裡了,剛開始搞不動到底該怎麼設定,才不會讓方塊超出遊戲框,後來看到下方這個方式,我自己覺得有點深奧,但是多看幾次就容易多了。
x>vel
、x<600-width
、y>vel
、y<600-height
到底是在幹嘛的呢?
這個還是一定要先提出來,就是再三提醒 「Pygame 遊戲介面左上角座標是「(0,0)」 。
在製作遊戲的過程中,經常需要思考座標位置,也就不能忘記起始座標了!
因此,以x>vel
為例就是依照前台介面左上角座標(0,0),然後要因為點選按鍵左的話,為了不要讓它超過左邊的邊界,因此設定成邊界一定要大於vel才行。
我覺得這是整個遊戲最抽象的一個概念了。
簡單來說,雖然我做了一個矩形,也成功讓它動了。
但是,在移動的過程中,其實比較像是複製矩形,因此會得到一條像貪吃蛇一樣的連續矩形圖。
但是,當我們只想要讓前臺顯示一個矩形的時候,這時候就要逆向思考,也就是不斷的使用舊有的覆蓋住舊的矩形,因此有了下面這段程式碼:
gameNaughtybox.fill((0,0,0))
其中色號可以隨著自己挑的背景去做更改。
stack overflow 真的是我學習的好夥伴啊)感動哭
Pygame sceen.fill() not filling up the color properly
以上,就是今日的學習重點。
看到方塊動的時候也是好感動啊!!!
因為真的很怕做不出來自己想要的結果啊!!!
希望明天可以讓他彈跳!!!
今天總算可以收工了。
TGI finished!!!
開心收工。